package com.ruoyi.common.utils;

import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.file.FileUploadUtils;
import com.ruoyi.common.utils.file.FileUtils;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.util.UUID;

/**
 * 本地文件上传工具类（生成带日期目录的URL）
 * @author 0617
 */
@Component
public class LocalUploadUtils {

    // 允许的文件后缀
    private static final String[] ALLOWED_EXTENSIONS = {"jpg", "jpeg", "png", "gif", "pdf", "doc", "docx"};



    /**
     * 上传文件并生成带日期目录的URL
     */


    // 你的后端方法保持这样即可
    public String uploadFile(MultipartFile file) {
        try {
            // 1. 获取上传基础路径
            String baseUploadPath = RuoYiConfig.getUploadPath();

            // 2. 调用系统工具类上传文件（保留原路径）
            String fullFilePath = FileUploadUtils.upload(baseUploadPath, file);
            // fullFilePath示例：upload/2025/08/21/bg1_20250821015006A001.jpg

            // 3. 生成完整访问URL
            // 3.1 获取项目域名（如http://localhost:8080）
            HttpServletRequest request = ServletUtils.getRequest();
            String domain = getDomain(request); // 调用现有方法获取域名

            // 3.2 构建完整URL（域名 + /profile/ + 文件相对路径）
            // 假设FileUploadUtils.upload返回的路径是"upload/..."，需拼接为"/profile/upload/..."
            String url = domain + fullFilePath;

            // 4. 替换路径分隔符为URL格式（处理Windows系统的反斜杠）
            return url.replace("\\", "/");
        } catch (Exception e) {
            throw new RuntimeException("本地文件上传失败：" + e.getMessage(), e);
        }
    }

    // 复用已有的构建域名方法
    public static String getDomain(HttpServletRequest request) {
        StringBuffer url = request.getRequestURL();
        String contextPath = request.getServletContext().getContextPath();
        return url.delete(url.length() - request.getRequestURI().length(), url.length())
                .append(contextPath)
                .toString();
    }



    /**
     * 校验文件后缀
     */
    private boolean isAllowedExtension(String filename) {
        if (filename == null || !filename.contains(".")) {
            return false;
        }
        String extension = filename.substring(filename.lastIndexOf(".") + 1).toLowerCase();
        for (String allowed : ALLOWED_EXTENSIONS) {
            if (allowed.equals(extension)) {
                return true;
            }
        }
        return false;
    }
}
